<!doctype html>
<html lang="zh-cn">
  <head>
    <title>多任务编程(1) // JW Blog</title>
    <meta charset="utf-8" />
    <meta name="generator" content="Hugo 0.60.1" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="author" content="John Doe" />
    <meta name="description" content="" />
    <link rel="stylesheet" href="https://duyi111.gitee.io/css/main.min.f90f5edd436ec7b74ad05479a05705770306911f721193e7845948fb07fe1335.css" />

    
    <meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="多任务编程(1)"/>
<meta name="twitter:description" content="1.多任务的介绍 1.1 介绍  多任务是指在同一时间内执行多个任务，例如：现在电脑安装的操作系统就是多任务操作系统，可以同时执行多个软件  1.2 多任务的执行方式  并发  在一段时间内交替去执行任务，需要注意单核CPU是并发的执行多任务的。   并行  对于多核CPU处理多任务，操作系统会给CPU的每个内核安排一个执行的任务，多个内核是真正的一起执行任务。多核CPU是并行的执行多任务，始终有多个软件一起执行。    1.3 小结  使用多任务就能充分利用CPU资源，提高程序的执行效率，让程序具备处理多个任务的能力 多任务执行方式有两种方式：并发和并行，这里并行才是多个任务真正意义一起执行。  2.进程的介绍 2.1 概念  进程是实现多任务的一种方式 一个正在运行的程序或者软件就是一个进程，它是操作系统进行资源分配的基本单位，也就是没启动一个进程，操作系统都会给其分配一定的运行资源（内存资源）保证进程的运行 一个程序运行后至少有一个进程，一个进程默认有一个线程，进程里面可以创建多个线程，线程是依附在进程里面的，没有进程就没有线程  2.2 说明  多进程可以完成多任务，每个进程就好比一家独立的公司，每个公司各自在运营，每个进程也各自在运行，执行各自的任务。 进程是操作系统进行资源分配的基本单位 进程是Python程序中实现多任务的一种方式  3.多进程的使用 3.1 导入进程包 import multiprocessing 3.2 创建子进程并指定执行的任务 sub_process = multiprocessing.Process(target = 任务名) 3.3 启动进程执行任务 sub_process.start() 3.4 Process进程类的说明  Process([group [, target [, name [, args [, kwargs]]]]])  group:指定进程组 target：执行的目标任务名 name：进程名字 args：以元组方式给执行任务传参 kwargs：以字典方式给执行任务传参   Process创建的实例对象的常用方法：  start()：启动子进程实例（创建子进程） join()：等待子进程执行结束 terminate()：不管任务是否完成，立即终止子进程   Process创建的实例对象的常用属性：  name：当前进程的别名，默认是Process-N，N为从1开始递增的整数    4."/>

    <meta property="og:title" content="多任务编程(1)" />
<meta property="og:description" content="1.多任务的介绍 1.1 介绍  多任务是指在同一时间内执行多个任务，例如：现在电脑安装的操作系统就是多任务操作系统，可以同时执行多个软件  1.2 多任务的执行方式  并发  在一段时间内交替去执行任务，需要注意单核CPU是并发的执行多任务的。   并行  对于多核CPU处理多任务，操作系统会给CPU的每个内核安排一个执行的任务，多个内核是真正的一起执行任务。多核CPU是并行的执行多任务，始终有多个软件一起执行。    1.3 小结  使用多任务就能充分利用CPU资源，提高程序的执行效率，让程序具备处理多个任务的能力 多任务执行方式有两种方式：并发和并行，这里并行才是多个任务真正意义一起执行。  2.进程的介绍 2.1 概念  进程是实现多任务的一种方式 一个正在运行的程序或者软件就是一个进程，它是操作系统进行资源分配的基本单位，也就是没启动一个进程，操作系统都会给其分配一定的运行资源（内存资源）保证进程的运行 一个程序运行后至少有一个进程，一个进程默认有一个线程，进程里面可以创建多个线程，线程是依附在进程里面的，没有进程就没有线程  2.2 说明  多进程可以完成多任务，每个进程就好比一家独立的公司，每个公司各自在运营，每个进程也各自在运行，执行各自的任务。 进程是操作系统进行资源分配的基本单位 进程是Python程序中实现多任务的一种方式  3.多进程的使用 3.1 导入进程包 import multiprocessing 3.2 创建子进程并指定执行的任务 sub_process = multiprocessing.Process(target = 任务名) 3.3 启动进程执行任务 sub_process.start() 3.4 Process进程类的说明  Process([group [, target [, name [, args [, kwargs]]]]])  group:指定进程组 target：执行的目标任务名 name：进程名字 args：以元组方式给执行任务传参 kwargs：以字典方式给执行任务传参   Process创建的实例对象的常用方法：  start()：启动子进程实例（创建子进程） join()：等待子进程执行结束 terminate()：不管任务是否完成，立即终止子进程   Process创建的实例对象的常用属性：  name：当前进程的别名，默认是Process-N，N为从1开始递增的整数    4." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://duyi111.gitee.io/post/%E5%A4%9A%E4%BB%BB%E5%8A%A1%E7%BC%96%E7%A8%8B1/" />
<meta property="article:published_time" content="2020-01-28T21:09:28+08:00" />
<meta property="article:modified_time" content="2020-01-28T21:09:28+08:00" />


  </head>
  <body>
    <header class="app-header">
      <a href="https://duyi111.gitee.io/"><img class="app-header-avatar" src="/avatar.jpg" alt="John Doe" /></a>
      <h1>JW Blog</h1>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vehicula turpis sit amet elit pretium.</p>
      <div class="app-header-social">
        
      </div>
    </header>
    <main class="app-container">
      
  <article class="post">
    <header class="post-header">
      <h1 class ="post-title">多任务编程(1)</h1>
      <div class="post-meta">
        <div>
          <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-calendar">
  <title>calendar</title>
  <rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line>
</svg>
          Jan 28, 2020
        </div>
        <div>
          <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-clock">
  <title>clock</title>
  <circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline>
</svg>
          1 min read
        </div></div>
    </header>
    <div class="post-content">
      <h2 id="1">1.多任务的介绍</h2>
<h4 id="11-">1.1 介绍</h4>
<ul>
<li>多任务是指在同一时间内执行多个任务，例如：现在电脑安装的操作系统就是多任务操作系统，可以同时执行多个软件</li>
</ul>
<h4 id="12-">1.2 多任务的执行方式</h4>
<ul>
<li>并发
<ul>
<li>在一段时间内<em><strong>交替</strong></em>去执行任务，需要注意单核CPU是并发的执行多任务的。</li>
</ul>
</li>
<li>并行
<ul>
<li>对于多核CPU处理多任务，操作系统会给CPU的每个内核安排一个执行的任务，多个内核是真正的一起执行任务。<em><strong>多核CPU是并行的执行多任务，始终有多个软件一起执行</strong></em>。</li>
</ul>
</li>
</ul>
<h4 id="13-">1.3 小结</h4>
<ul>
<li>使用多任务就能充分利用CPU资源，提高程序的执行效率，让程序具备处理多个任务的能力</li>
<li>多任务执行方式有两种方式：<em><strong>并发和并行</strong></em>，这里<em><strong>并行才是多个任务真正意义一起执行</strong></em>。</li>
</ul>
<h2 id="2">2.进程的介绍</h2>
<h4 id="21-">2.1 概念</h4>
<ul>
<li>进程是实现多任务的一种方式</li>
<li>一个正在运行的程序或者软件就是一个进程，<em><strong>它是操作系统进行资源分配的基本单位</strong></em>，也就是没启动一个进程，操作系统都会给其分配一定的运行资源（内存资源）保证进程的运行</li>
<li><strong>一个程序运行后至少有一个进程，<em>一个进程默认有一个线程</em></strong>，进程里面可以创建多个线程，<strong>线程是依附在进程里面的，<em>没有进程就没有线程</em></strong></li>
</ul>
<h4 id="22-">2.2 说明</h4>
<ul>
<li>多进程可以完成多任务，每个进程就好比一家独立的公司，每个公司各自在运营，每个进程也各自在运行，执行各自的任务。</li>
<li>进程是操作系统进行资源分配的基本单位</li>
<li>进程是Python程序中实现多任务的一种方式</li>
</ul>
<h2 id="3">3.多进程的使用</h2>
<h4 id="31-">3.1 导入进程包</h4>
<pre><code>import multiprocessing
</code></pre><h4 id="32-">3.2 创建子进程并指定执行的任务</h4>
<pre><code>sub_process = multiprocessing.Process(target = 任务名)
</code></pre><h4 id="33-">3.3 启动进程执行任务</h4>
<pre><code>sub_process.start()
</code></pre><h4 id="34-process">3.4 Process进程类的说明</h4>
<ul>
<li>Process([group [, target [, name [, args [, kwargs]]]]])
<ul>
<li>group:指定进程组</li>
<li>target：执行的目标任务名</li>
<li>name：进程名字</li>
<li>args：以元组方式给执行任务传参</li>
<li>kwargs：以字典方式给执行任务传参</li>
</ul>
</li>
<li>Process创建的实例对象的常用方法：
<ul>
<li>start()：启动子进程实例（创建子进程）</li>
<li>join()：等待子进程执行结束</li>
<li>terminate()：不管任务是否完成，立即终止子进程</li>
</ul>
</li>
<li>Process创建的实例对象的常用属性：
<ul>
<li>name：当前进程的别名，默认是Process-N，N为从1开始递增的整数</li>
</ul>
</li>
</ul>
<h2 id="4">4.获取进程编号</h2>
<h4 id="41-">4.1 获取进程编号的目的</h4>
<ul>
<li>获取进程编号的目的是验证主进程和子进程的关系，可以得知子进程是由哪个主进程创建的</li>
<li>获取进程编号的两种操作：
<ul>
<li>获取当前进程编号</li>
<li>获取当前父进程编号</li>
</ul>
</li>
</ul>
<h4 id="42-">4.2 获取当前进程编号</h4>
<ul>
<li>格式：
<pre><code>os.getpid()
</code></pre></li>
</ul>
<h4 id="43-">4.3 获取当前父进程编号</h4>
<ul>
<li>格式：
<pre><code>os.getppid()
</code></pre></li>
</ul>
<h2 id="5">5.进程执行带有参数的任务</h2>
<ul>
<li>Process类执行任务并给任务传参数有两种方式：
<ul>
<li>args表示以元组的方式给执行任务传参
<ul>
<li>元组方式传参一定要和参数的顺序保持一致</li>
</ul>
</li>
<li>kwargs表示以字典方式给执行任务传参
<ul>
<li>字典方式传参字典中的key一定要和参数名保持一致</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="6">6.进程的注意点</h2>
<h4 id="61-">6.1 进程之间不共享全局变量</h4>
<ul>
<li>创建子进程会对主进程资源进行拷贝，也就是子进程是主进程的一个副本，就好像是一对双胞胎，之所以进程之间不共享全局变量，是因为操作的不是同一个进程里面的全局变量，只不过不同进程里面的全局变量名字相同而已。</li>
</ul>
<h4 id="62-">6.2 主进程会等待所有的子进程执行结束再结束</h4>
<ul>
<li>为了保证子进程能够正常的进行，主进程会等所有的子进程执行完成之后再摧毁，<em><strong>设置守护主进程的目的是主进程退出子进程销毁，不让主进程在等待子进程去执行</strong></em>。</li>
<li>保证主进程正常退出的方式：
<ul>
<li>守护主进程
<ul>
<li>主进程退出子进程直接销毁不再执行，子进程的生命周期依赖于主进程。</li>
<li>格式：
<pre><code>子进程对象.daemon = True
</code></pre></li>
</ul>
</li>
<li>子进程销毁
<ul>
<li>主进程退出之前让子进程销毁</li>
<li>格式：
<pre><code>子进程对象.terminate()
</code></pre></li>
</ul>
</li>
</ul>
</li>
</ul>

    </div>
    <div class="post-footer">
      
    </div>
  </article>

    </main>
  </body>
</html>
